package com.EAsystem.utils;

import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;

/**
 * 日期时间工具类
 */
public class DateTimeUtil {

    private static final String DEFAULT_PATTERN = "yyyy-MM-dd HH:mm:ss";
    private static final String DATE_PATTERN = "yyyy-MM-dd";
    private static final String TIME_PATTERN = "HH:mm:ss";

    // 使用ThreadLocal解决SimpleDateFormat线程安全问题
    private static final ThreadLocal<SimpleDateFormat> DEFAULT_FORMAT = 
        ThreadLocal.withInitial(() -> new SimpleDateFormat(DEFAULT_PATTERN));

    /**
     * 获取当前时间的字符串表示
     * @return 当前时间字符串，格式为 yyyy-MM-dd HH:mm:ss
     */
    public static String getCurrentTime() {
        return DEFAULT_FORMAT.get().format(new Date());
    }

    /**
     * 获取当前时间的字符串表示，使用指定格式
     * @param pattern 日期格式
     * @return 当前时间字符串
     */
    public static String getCurrentTime(String pattern) {
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        return sdf.format(new Date());
    }

    /**
     * 获取当前日期（不含时间）
     * @return 当前日期字符串，格式为 yyyy-MM-dd
     */
    public static String getCurrentDate() {
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_PATTERN);
        return sdf.format(new Date());
    }

    /**
     * 格式化指定日期
     * @param date 要格式化的日期
     * @return 格式化后的字符串
     */
    public static String formatDate(Date date) {
        if (date == null) {
            return null;
        }
        return DEFAULT_FORMAT.get().format(date);
    }

    /**
     * 使用LocalDateTime获取当前时间（推荐使用，Java 8+）
     * @return 当前时间字符串
     */
    public static String getCurrentTimeWithLocalDateTime() {
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(DEFAULT_PATTERN));
    }
}